<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // 实现数组的扁平化

        const arr = [1,2,[3,[4,5]]] ;

        // [1,2,3,4,5]


        // 自己封装实现扁平化
        function myFlat(arr) {
            let res = [] ;
            for(let i = 0 ; i < arr.length ; i++) {
                // 判断是不是数组
                // if(Array.isArray(arr[i])) {
                //     // res.push(myFlat(arr[i])) ;    // 实现深复制
                //     res = res.concat(myFlat(arr[i])) ;   // 拼接一下
                // } else {
                //     res.push(arr[i])
                //     // res = res.concat(arr[i])
                // }
                
                res = res.concat(Array.isArray(arr[i]) ? myFlat(arr[i]) : arr[i]) ;

            }
            return res
        }



        // 使用 reduce 实现数组扁平化  ？？？？？？？？？？？？
        // reduce + concat 
        function fn(arr) {
            return arr.reduce((prev , item) => {    
                return prev.concat(Array.isArray(item) ? fn(item) : item) ;
            } , [])
        }


        // reduce的用法 ？？？？？？？？？？？？？？？？？？？？？？？？？？？？？？？



        console.log(fn(arr));


        // console.log(arr.flat(Infinity));



        // concat  拼接数组   
        //   他的参数可以是数组，也可以是其他值


        var arr2 = [1,2,3] ;

        // console.log(arr2.concat(arr3 , 'a' , 'b' , 9));


        // arr2 = arr2.concat(4) ;
        // console.log(arr2);



    </script>
    
</body>
</html>